# -*- coding: utf-8 -*-
"""
Pandas concat 函数示例
concat 用于沿着特定轴连接多个 DataFrame 或 Series
"""

import pandas as pd
import numpy as np

# ============= 示例1: 垂直拼接（默认 axis=0，沿行方向） =============
print("=" * 50)
print("示例1: 垂直拼接 DataFrame（axis=0）")
print("=" * 50)

# 创建两个 DataFrame
df1 = pd.DataFrame({
    '姓名': ['张三', '李四'],
    '年龄': [25, 30],
    '城市': ['北京', '上海']
})

df2 = pd.DataFrame({
    '姓名': ['王五', '赵六'],
    '年龄': [28, 35],
    '城市': ['广州', '深圳']
})

print("\n原始 DataFrame 1:")
print(df1)
print("\n原始 DataFrame 2:")
print(df2)

# 垂直拼接
result1 = pd.concat([df1, df2])
print("\n垂直拼接结果（保留原索引）:")
print(result1)

# 垂直拼接并重置索引
result2 = pd.concat([df1, df2], ignore_index=True)
print("\n垂直拼接结果（重置索引）:")
print(result2)

# ============= 示例2: 水平拼接（axis=1，沿列方向） =============
print("\n" + "=" * 50)
print("示例2: 水平拼接 DataFrame（axis=1）")
print("=" * 50)

# 创建两个 DataFrame
df3 = pd.DataFrame({
    '姓名': ['张三', '李四', '王五'],
    '年龄': [25, 30, 28]
})

df4 = pd.DataFrame({
    '工资': [8000, 12000, 10000],
    '部门': ['技术部', '市场部', '财务部']
})

print("\n原始 DataFrame 3:")
print(df3)
print("\n原始 DataFrame 4:")
print(df4)

# 水平拼接
result3 = pd.concat([df3, df4], axis=1)
print("\n水平拼接结果:")
print(result3)

# ============= 示例3: 拼接多个 DataFrame =============
print("\n" + "=" * 50)
print("示例3: 拼接多个 DataFrame")
print("=" * 50)

df5 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df6 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
df7 = pd.DataFrame({'A': [9, 10], 'B': [11, 12]})

print("\nDataFrame 5:")
print(df5)
print("\nDataFrame 6:")
print(df6)
print("\nDataFrame 7:")
print(df7)

# 拼接多个 DataFrame
result4 = pd.concat([df5, df6, df7], ignore_index=True)
print("\n拼接多个 DataFrame 结果:")
print(result4)

# ============= 示例4: 使用 keys 参数添加层次化索引 =============
print("\n" + "=" * 50)
print("示例4: 使用 keys 参数添加层次化索引")
print("=" * 50)

df8 = pd.DataFrame({'销量': [100, 200]}, index=['产品A', '产品B'])
df9 = pd.DataFrame({'销量': [150, 250]}, index=['产品A', '产品B'])

print("\n第一季度数据:")
print(df8)
print("\n第二季度数据:")
print(df9)

# 使用 keys 参数
result5 = pd.concat([df8, df9], keys=['第一季度', '第二季度'])
print("\n带有层次化索引的拼接结果:")
print(result5)

# ============= 示例5: 处理列不一致的情况 =============
print("\n" + "=" * 50)
print("示例5: 处理列不一致的 DataFrame")
print("=" * 50)

df10 = pd.DataFrame({
    '姓名': ['张三', '李四'],
    '年龄': [25, 30]
})

df11 = pd.DataFrame({
    '姓名': ['王五'],
    '工资': [10000]
})

print("\nDataFrame 10:")
print(df10)
print("\nDataFrame 11:")
print(df11)

# 默认使用外连接（outer join），缺失值填充 NaN
result6 = pd.concat([df10, df11], ignore_index=True)
print("\n拼接结果（外连接，join='outer'）:")
print(result6)

# 使用内连接（inner join），只保留共同的列
result7 = pd.concat([df10, df11], join='inner', ignore_index=True)
print("\n拼接结果（内连接，join='inner'）:")
print(result7)

# ============= 示例6: Series 的拼接 =============
print("\n" + "=" * 50)
print("示例6: Series 的拼接")
print("=" * 50)

s1 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
s2 = pd.Series([4, 5, 6], index=['d', 'e', 'f'])

print("\nSeries 1:")
print(s1)
print("\nSeries 2:")
print(s2)

# 拼接 Series
result8 = pd.concat([s1, s2])
print("\nSeries 拼接结果:")
print(result8)

print("\n" + "=" * 50)
print("所有示例执行完成！")
print("=" * 50)

